{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [],
   "source": [
    "# import modules\n",
    "from xgboost import XGBClassifier\n",
    "import xgboost as xgb\n",
    "\n",
    "import pandas as pd \n",
    "import numpy as np\n",
    "\n",
    "from sklearn.model_selection import GridSearchCV\n",
    "from sklearn.model_selection import StratifiedKFold\n",
    "\n",
    "from sklearn.metrics import log_loss\n",
    "\n",
    "from matplotlib import pyplot\n",
    "import seaborn as sns\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>bathrooms</th>\n",
       "      <th>bedrooms</th>\n",
       "      <th>price</th>\n",
       "      <th>price_bathrooms</th>\n",
       "      <th>price_bedrooms</th>\n",
       "      <th>room_diff</th>\n",
       "      <th>room_num</th>\n",
       "      <th>Year</th>\n",
       "      <th>Month</th>\n",
       "      <th>Day</th>\n",
       "      <th>...</th>\n",
       "      <th>walk</th>\n",
       "      <th>walls</th>\n",
       "      <th>war</th>\n",
       "      <th>washer</th>\n",
       "      <th>water</th>\n",
       "      <th>wheelchair</th>\n",
       "      <th>wifi</th>\n",
       "      <th>windows</th>\n",
       "      <th>work</th>\n",
       "      <th>interest_level</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.5</td>\n",
       "      <td>3</td>\n",
       "      <td>3000</td>\n",
       "      <td>1200.0</td>\n",
       "      <td>750.000000</td>\n",
       "      <td>-1.5</td>\n",
       "      <td>4.5</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>24</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2</td>\n",
       "      <td>5465</td>\n",
       "      <td>2732.5</td>\n",
       "      <td>1821.666667</td>\n",
       "      <td>-1.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>6</td>\n",
       "      <td>12</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>2850</td>\n",
       "      <td>1425.0</td>\n",
       "      <td>1425.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>17</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1</td>\n",
       "      <td>3275</td>\n",
       "      <td>1637.5</td>\n",
       "      <td>1637.500000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>18</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1.0</td>\n",
       "      <td>4</td>\n",
       "      <td>3350</td>\n",
       "      <td>1675.0</td>\n",
       "      <td>670.000000</td>\n",
       "      <td>-3.0</td>\n",
       "      <td>5.0</td>\n",
       "      <td>2016</td>\n",
       "      <td>4</td>\n",
       "      <td>28</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 228 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   bathrooms  bedrooms  price  price_bathrooms  price_bedrooms  room_diff  \\\n",
       "0        1.5         3   3000           1200.0      750.000000       -1.5   \n",
       "1        1.0         2   5465           2732.5     1821.666667       -1.0   \n",
       "2        1.0         1   2850           1425.0     1425.000000        0.0   \n",
       "3        1.0         1   3275           1637.5     1637.500000        0.0   \n",
       "4        1.0         4   3350           1675.0      670.000000       -3.0   \n",
       "\n",
       "   room_num  Year  Month  Day       ...        walk  walls  war  washer  \\\n",
       "0       4.5  2016      6   24       ...           0      0    0       0   \n",
       "1       3.0  2016      6   12       ...           0      0    0       0   \n",
       "2       2.0  2016      4   17       ...           0      0    0       0   \n",
       "3       2.0  2016      4   18       ...           0      0    0       0   \n",
       "4       5.0  2016      4   28       ...           0      0    1       0   \n",
       "\n",
       "   water  wheelchair  wifi  windows  work  interest_level  \n",
       "0      0           0     0        0     0               1  \n",
       "1      0           0     0        0     0               2  \n",
       "2      0           0     0        0     0               0  \n",
       "3      0           0     0        0     0               2  \n",
       "4      0           0     0        0     0               2  \n",
       "\n",
       "[5 rows x 228 columns]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "dpath = './data/'\n",
    "train = pd.read_csv(dpath +\"RentListingInquries_FE_train.csv\")\n",
    "# train = train.iloc[:100,:]\n",
    "train.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "y_train = train['interest_level']\n",
    "X_train = train.drop('interest_level',axis=1)\n",
    "X_train = np.array(X_train)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# Prepare cross validation \n",
    "kfold = StratifiedKFold(n_splits=5, shuffle=True, random_state=3)\n",
    "kfold = list(kfold.split(X_train, y_train))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'max_depth': [5, 6, 7], 'min_child_weight': [6, 7, 8]}"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 根据上面一个文件得到的最优解，max_depth在5左右精细调整，min_child_weight在5左右精细调整\n",
    "max_depth = [5,6,7] # 之前在【4，6，8，10】中得到最优深度6，现在精调，步长为1\n",
    "min_child_weight = [6,7,8]# 之前在【4，5，6】中得到最优6，现在精调\n",
    "param_test2_2 = dict(max_depth=max_depth, min_child_weight=min_child_weight)\n",
    "param_test2_2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/model_selection/_search.py:761: DeprecationWarning: The grid_scores_ attribute was deprecated in version 0.18 in favor of the more elaborate cv_results_ attribute. The grid_scores_ attribute will not be available from 0.20\n",
      "  DeprecationWarning)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "([mean: -0.59189, std: 0.00352, params: {'max_depth': 5, 'min_child_weight': 6},\n",
       "  mean: -0.59095, std: 0.00385, params: {'max_depth': 5, 'min_child_weight': 7},\n",
       "  mean: -0.59137, std: 0.00369, params: {'max_depth': 5, 'min_child_weight': 8},\n",
       "  mean: -0.58877, std: 0.00335, params: {'max_depth': 6, 'min_child_weight': 6},\n",
       "  mean: -0.58899, std: 0.00362, params: {'max_depth': 6, 'min_child_weight': 7},\n",
       "  mean: -0.58895, std: 0.00335, params: {'max_depth': 6, 'min_child_weight': 8},\n",
       "  mean: -0.58817, std: 0.00368, params: {'max_depth': 7, 'min_child_weight': 6},\n",
       "  mean: -0.58756, std: 0.00425, params: {'max_depth': 7, 'min_child_weight': 7},\n",
       "  mean: -0.58823, std: 0.00400, params: {'max_depth': 7, 'min_child_weight': 8}],\n",
       " {'max_depth': 7, 'min_child_weight': 7},\n",
       " -0.58755861506089047)"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "xgb2_2 = XGBClassifier(\n",
    "        learning_rate =0.1,\n",
    "        n_estimators=187,  #第一轮参数调整得到的n_estimators最优值\n",
    "        max_depth=5,\n",
    "        min_child_weight=1,\n",
    "        gamma=0,\n",
    "        subsample=0.3,\n",
    "        colsample_bytree=0.8,\n",
    "        colsample_bylevel = 0.7,\n",
    "        objective= 'multi:softprob',\n",
    "        seed=3)\n",
    "\n",
    "\n",
    "gsearch2_2 = GridSearchCV(xgb2_2, param_grid = param_test2_2, scoring='neg_log_loss',n_jobs=-1, cv=kfold)\n",
    "gsearch2_2.fit(X_train , y_train)\n",
    "\n",
    "gsearch2_2.grid_scores_, gsearch2_2.best_params_, gsearch2_2.best_score_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "{'mean_fit_time': array([ 169.47318826,  163.03672614,  153.75726504,  190.07897406,\n",
       "         190.16689167,  177.15509033,  205.37279286,  205.8149766 ,\n",
       "         161.7793366 ]),\n",
       " 'mean_score_time': array([ 0.75534635,  0.78917942,  0.75919824,  1.61962233,  1.65880876,\n",
       "         0.97559638,  1.2639605 ,  1.27087851,  0.80734067]),\n",
       " 'mean_test_score': array([-0.59188672, -0.59095026, -0.5913742 , -0.58877307, -0.58898857,\n",
       "        -0.58895453, -0.5881748 , -0.58755862, -0.58823111]),\n",
       " 'mean_train_score': array([-0.53377114, -0.53471905, -0.53578965, -0.50043123, -0.5028038 ,\n",
       "        -0.50513863, -0.46574857, -0.46947532, -0.47268725]),\n",
       " 'param_max_depth': masked_array(data = [5 5 5 6 6 6 7 7 7],\n",
       "              mask = [False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'param_min_child_weight': masked_array(data = [6 7 8 6 7 8 6 7 8],\n",
       "              mask = [False False False False False False False False False],\n",
       "        fill_value = ?),\n",
       " 'params': [{'max_depth': 5, 'min_child_weight': 6},\n",
       "  {'max_depth': 5, 'min_child_weight': 7},\n",
       "  {'max_depth': 5, 'min_child_weight': 8},\n",
       "  {'max_depth': 6, 'min_child_weight': 6},\n",
       "  {'max_depth': 6, 'min_child_weight': 7},\n",
       "  {'max_depth': 6, 'min_child_weight': 8},\n",
       "  {'max_depth': 7, 'min_child_weight': 6},\n",
       "  {'max_depth': 7, 'min_child_weight': 7},\n",
       "  {'max_depth': 7, 'min_child_weight': 8}],\n",
       " 'rank_test_score': array([9, 7, 8, 4, 6, 5, 2, 1, 3], dtype=int32),\n",
       " 'split0_test_score': array([-0.58651364, -0.5842897 , -0.58521954, -0.58315561, -0.58314191,\n",
       "        -0.58446841, -0.58175253, -0.579819  , -0.58164074]),\n",
       " 'split0_train_score': array([-0.53497083, -0.53555728, -0.53638317, -0.50172579, -0.50464831,\n",
       "        -0.50664402, -0.46885857, -0.47137754, -0.47459884]),\n",
       " 'split1_test_score': array([-0.58965974, -0.58955635, -0.58958196, -0.58731441, -0.58742405,\n",
       "        -0.58652495, -0.5874967 , -0.58621584, -0.58645074]),\n",
       " 'split1_train_score': array([-0.53480593, -0.53617736, -0.53721273, -0.49910435, -0.50175396,\n",
       "        -0.50408949, -0.46626012, -0.46902629, -0.47170754]),\n",
       " 'split2_test_score': array([-0.59215811, -0.59195856, -0.59224342, -0.58992939, -0.58919903,\n",
       "        -0.58923893, -0.58854033, -0.59073928, -0.58914008]),\n",
       " 'split2_train_score': array([-0.53287143, -0.53467349, -0.53577158, -0.50174569, -0.50290324,\n",
       "        -0.50634542, -0.46464244, -0.46985645, -0.47311999]),\n",
       " 'split3_test_score': array([-0.59472762, -0.59348295, -0.59409998, -0.5904119 , -0.59137194,\n",
       "        -0.59024978, -0.59027989, -0.58982768, -0.59041162]),\n",
       " 'split3_train_score': array([-0.53385152, -0.53450625, -0.53522884, -0.49859136, -0.50190248,\n",
       "        -0.50358375, -0.46239899, -0.46797624, -0.47135078]),\n",
       " 'split4_test_score': array([-0.59637588, -0.5954651 , -0.59572742, -0.59305536, -0.59380741,\n",
       "        -0.59429222, -0.59280593, -0.59119238, -0.593514  ]),\n",
       " 'split4_train_score': array([-0.53235598, -0.53268087, -0.53435194, -0.50098897, -0.50281101,\n",
       "        -0.50503048, -0.46658274, -0.46914006, -0.47265913]),\n",
       " 'std_fit_time': array([ 0.32189484,  7.63819941,  0.43789792,  3.46180522,  7.27504857,\n",
       "         0.61443332,  1.36380759,  1.59023489,  0.44067889]),\n",
       " 'std_score_time': array([ 0.036518  ,  0.11682449,  0.06877864,  1.12446689,  1.16426454,\n",
       "         0.19276255,  0.47709004,  0.51211036,  0.18403941]),\n",
       " 'std_test_score': array([ 0.00352488,  0.00385018,  0.00369395,  0.0033479 ,  0.00362144,\n",
       "         0.00335477,  0.00368009,  0.00424678,  0.00400222]),\n",
       " 'std_train_score': array([ 0.00103234,  0.00118582,  0.00097563,  0.0013312 ,  0.00103215,\n",
       "         0.00120437,  0.00214816,  0.00112472,  0.00114789])}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "gsearch2_2.cv_results_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('mean_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('std_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split0_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split1_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split2_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split3_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n",
      "/anaconda3/lib/python3.6/site-packages/sklearn/utils/deprecation.py:122: FutureWarning: You are accessing a training score ('split4_train_score'), which will not be available by default any more in 0.21. If you need training scores, please set return_train_score=True\n",
      "  warnings.warn(*warn_args, **warn_kwargs)\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best: -0.587559 using {'max_depth': 7, 'min_child_weight': 7}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1a1d509b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# summarize results\n",
    "print(\"Best: %f using %s\" % (gsearch2_2.best_score_, gsearch2_2.best_params_))\n",
    "test_means = gsearch2_2.cv_results_[ 'mean_test_score' ]\n",
    "test_stds = gsearch2_2.cv_results_[ 'std_test_score' ]\n",
    "train_means = gsearch2_2.cv_results_[ 'mean_train_score' ]\n",
    "train_stds = gsearch2_2.cv_results_[ 'std_train_score' ]\n",
    "\n",
    "pd.DataFrame(gsearch2_2.cv_results_).to_csv('my_preds_maxdepth_min_child_weights_2.csv')\n",
    "\n",
    "# plot results\n",
    "test_scores = np.array(test_means).reshape(len(max_depth), len(min_child_weight))\n",
    "train_scores = np.array(train_means).reshape(len(max_depth), len(min_child_weight))\n",
    "\n",
    "for i, value in enumerate(max_depth):\n",
    "    pyplot.plot(min_child_weight, -test_scores[i], label= 'test_max_weight:'   + str(value))\n",
    "#for i, value in enumerate(min_child_weight):\n",
    "#    pyplot.plot(max_depth, train_scores[i], label= 'train_min_child_weight:'   + str(value))\n",
    "    \n",
    "pyplot.legend()\n",
    "pyplot.xlabel( 'max_depth' )                                                                                                      \n",
    "pyplot.ylabel( 'Log Loss' )\n",
    "pyplot.savefig('max_depth_vs_min_child_weght_2.png' )"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
